/**   
* @Project:	Mybatis
* @Title: MybatisFirst.java
* @Package com.sise.mybatis.introduction
* @Description: TODO(用一句话描述该文件做什么)
* @author: zhiguo.lin   
* @date 2016年8月17日 上午7:52:19
* @CopyRight: CopyRight@2016
* @version V1.0   
*/


package com.sise.mybatis.first;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import com.sise.mybatis.po.User;


/**
 * @ClassName: MybatisFirst
 * @Description: mybatis 入门程序
 * @author: zhiguo.lin
 * @date 2016年8月17日 上午7:52:19
 * 
 */

public class MybatisFirst {
    
    /** 
    * @Title: findUserById 
    * @Description: 根据id查询用户记录
    * @throws IOException
    * @return void 
    */ 
    
    @Test
    public void findUserById() throws IOException {
        // mybatis配置文件
        final String RESOURCE = "sqlMapConfig.xml";
        // 得到配置文件流
        InputStream inputStream;
        inputStream = Resources.getResourceAsStream(RESOURCE);
        // 创建会话工厂，传入mybatis的配置文件信息
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
        
                .build(inputStream);
        
        //通过SqlSessionFactory创建SqlSession
        SqlSession sqlSession= sqlSessionFactory.openSession();
        
        /* 通过SqlSession操作数据库
                         第一个参数：映射文件中statement的id，等于=namespace+"."+statement的id
                         第二个参数：指定和映射文件中所匹配的parameterType类型的参数
        sqlSession.selectOne结果 是与映射文件中所匹配的resultType类型的对象
        selectOne查询出一条记录*/
        
        User user = sqlSession.selectOne("test.findUserById",1);
        
        System.out.println(user.toString());
        
        //关闭sqlSession
        sqlSession.close();
    }
    
    
    /** 
    * @Title: findUserByName 
    * @Description: 根据名称模糊查询用户记录
    * @throws Exception
    * @return void 
    */ 
    
    @Test
    public void findUserByName() throws Exception {
        
        // mybatis配置文件
        final String RESOURCE = "sqlMapConfig.xml";
        // 得到配置文件流
        InputStream inputStream;
        inputStream = Resources.getResourceAsStream(RESOURCE);
        // 创建会话工厂，传入mybatis的配置文件信息
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
        
                .build(inputStream);
        
        //通过SqlSessionFactory创建SqlSession
        SqlSession sqlSession= sqlSessionFactory.openSession();
        
        //执行查询
        /*selectOne表示查询出一条记录进行映射。如果使用selectOne可以实现使用selectList也可以实现（list中只有一个对象）。
        selectList表示查询出一个列表（多条记录）进行映射。如果使用selectList查询多条记录，不能使用selectOne。*/
        List<User> userList = sqlSession.selectList("test.findUserByName", "小明");    
        System.out.println(userList);
        //关闭sqlSession
        sqlSession.close();
        
    }
    
    @Test
    public void insertUser() throws Exception {
        
        // mybatis配置文件
        final String RESOURCE = "sqlMapConfig.xml";
        // 得到配置文件流
        InputStream inputStream;
        inputStream = Resources.getResourceAsStream(RESOURCE);
        // 创建会话工厂，传入mybatis的配置文件信息
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
        
                .build(inputStream);
        
        //通过SqlSessionFactory创建SqlSession
        SqlSession sqlSession= sqlSessionFactory.openSession();
        //执行插入操作 
        User user = new User();
        //user.setId(2);
        user.setUsername("张三");
        user.setBirthday(new Date());
        user.setSex("1");
        user.setAddress("广东湛江");
        
        //DML语句会默认返回操作影响的记录数
        sqlSession.insert("test.insertUser", user);
        System.out.println(user.getId());
        
        //提交事务,如果事务不提交，数据库不会更新数据
        sqlSession.commit();
        
        System.out.println(user.getId());
        //关闭sqlSession
        sqlSession.close();
        
    }
    
    @Test
    public void delUser() throws Exception {
        // mybatis配置文件
        final String RESOURCE = "sqlMapConfig.xml";
        // 得到配置文件流
        InputStream inputStream;
        inputStream = Resources.getResourceAsStream(RESOURCE);
        // 创建会话工厂，传入mybatis的配置文件信息
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
        
                .build(inputStream);
        
        //通过SqlSessionFactory创建SqlSession
        SqlSession sqlSession= sqlSessionFactory.openSession();
        
        Integer result = sqlSession.delete("deleteUser", 2);
        
        System.out.println(result);
        
        sqlSession.commit();
        
        sqlSession.close();
    }
    
    
   

  
}
